/**
 * @version 1.8
 * @Author Djx_hmbb
 * @Date 2023/8/14 10:43
 * @注释:wait+notify
 * wait后,只有等notify通知解锁了,才可以再次运行
 * wait无参版本-->死等
 * 有参版本(时间)-->规定一个等待的最大时间
 *
 * wait的本质:
 * 1. 先释放锁
 * 2. 进行阻塞等待
 * 3. 收到通知后,重新尝试获取锁,得到后,继续往下执行
 */
public class ThreadDemo14 {
    public static void main(String[] args) throws InterruptedException {
        Object object = new Object();
        Thread t1 = new Thread(()->{
            System.out.println("t1:wait前");
            try {
                synchronized (object) {//代码块锁定
                    object.wait(10_000);//加锁
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("t1:wait后");
        });

        Thread t2 = new Thread(()->{
            System.out.println("t2:notify前");
            synchronized (object) {//代码块锁定
                object.notify();//加锁
            }
            System.out.println("t2:notify后");
        });

        t1.start();
//        Thread.sleep(500);//这里必须要有一个时间来干t1和t2的顺序,但不是绝对的
        t2.start();
    }
}
